package br.edu.unirn.dao;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.edu.unirn.dominio.Produto;

public class ProdutoDAO extends GenericDAO<Produto>{

	@Override
	public Class<Produto> getClassType() {
		return Produto.class;
	}
	
	
	@SuppressWarnings("unchecked")
	public List<Produto> listTopProdutos(Date inicio, Date fim) {
		
		Session session = (Session) getEm().getDelegate();
		String sql = "select produto_id, p.denominacao,p.descricao, "
				+ "sum(quantidade) as total_produto from itemvenda i "
				+ "JOIN produto p ON p.id = i.produto_id "
				+ "JOIN venda v On v.id = i.venda_id "
				+ "where :inicio <= datavenda and datavenda <= :fim "
				+ "group by produto_id, denominacao,descricao "
				+ "order by total_produto desc limit 10 ";
				
		
		Query q = session.createSQLQuery(sql);
		
		q.setDate("inicio", inicio);
		q.setDate("fim", fim);
		
		List<Object[]> lista = q.list();
		List<Produto> produtos = new ArrayList<Produto>();
		Produto produto = null;
		for (Object[] object : lista) {
			produto = new Produto();
			produto.setId((Integer)object[0]);
			produto.setDenominacao((String)object[1]);
			produto.setDescricao((String)object[2]);
			produto.setQuantidade(((BigInteger)object[3]).intValue());
			produtos.add(produto);
		}
		return produtos;
		
	}

}
